<?php
/**
 * Action de Campanhas.
 *
 * @author    Chavão <freela@chavao.net>
 * @copyright Copyright (c) 2011, Chavão
 * @version   0.1
 */

class CampanhaController extends AppController
{
    /**
     * Método executado antes de qualquer action
     * @access public
     */
    public function beforeFilter()
    {
        if(!$this->Usuario->estaLogado()) $this->redirect('/usuario/login');

        $iClienteId = $_SESSION['cliente_id'];

        $arrCampanha = $this->Campanha->listarTodasCampanhas();

        $this->set('iTotalCampanhas', sizeof($arrCampanha));

        $iMaisLeads = 0;
        $iTotalLeads = 0;
        if(sizeof($arrCampanha)>0)
        {
            foreach($arrCampanha as $k => $v)
            {
                $objCamp = (object) $v;
                $iLeads = $this->Lead->count(array(
                                            'conditions' => array('camp_id' => $objCamp->camp_id)
                ));

                $iTotalLeads += $iLeads;

                if($iLeads > $iMaisLeads)
                {
                    $iMaisLeads = $iLeads;

                    $sMelhorCampanha = $objCamp->camp_nome;
                    $sMelhorResponsavel = $objCamp->camp_responsavel;
                }
            }
            if($iTotalLeads>0) $this->set('sMelhorCampanha', $sMelhorCampanha);
            if($iTotalLeads>0) $this->set('sMelhorResponsavel', $sMelhorResponsavel);
        }
        $this->set('iTotalLeads', $iTotalLeads);
    }
    /**
     * Action index
     * @access public
     */
    public function index()
    {
        $this->layout = "default.novo";
        $this->bCampoBusca = true;

        $iClienteId = $_SESSION['cliente_id'];

        // Montando critérios
        $sCriterio = $this->montarCriterio();

        if(trim($sCriterio)!='')
        {
            $arrConditions = array("clie_id" => $iClienteId,$sCriterio);
        }
        else
        {
            $arrConditions = array("clie_id" => $iClienteId);
        }

        $arrCampanha = $this->Campanha->all(array(
				"conditions" => $arrConditions
        ));
        /*
         //comentei porque tirei a paginação
         $arrCampanha = $this->Campanha->paginate(array(
				"page" => $this->page(),
				"perPage" => CHAV_PAGINATE,
				"conditions" => $arrConditions
        ));
         */
        foreach($arrCampanha as $k => $v)
        {
            $v['lead_count'] = $this->Lead->count(array(
				"conditions" => array("camp_id" => $v['camp_id'])
            ));

            $arrCampanha[$k]['lead_count'] = $v['lead_count'];
        }
        $this->set('bAddCampanha', $this->Campanha->podeAddCampanha());
        $this->set('arrCampanha', $arrCampanha);
    }

    /**
     * Action adicionar
     * @access public
     */
    public function adicionar()
    {
        $this->layout = "default.novo";
        $this->bCampoBusca = false;

        if(!$this->Campanha->podeAddCampanha())
        {
            $this->redirect('/campanha');
        }

        if(!empty($this->data))
        {
            date_default_timezone_set('America/Sao_Paulo');
            $this->data['camp_dt_criacao'] = date('Y-m-d');
            $this->data['clie_id'] = $_SESSION['cliente_id'];

            if(!empty($_FILES))
            {
                $this->UploadComponent->path = '/uploads';

                $this->UploadComponent->allowedTypes = array('pdf', 'PDF', 'ppt', 'PPT');
                $this->UploadComponent->maxSize = 3;

                $sFilename = $this->UploadComponent->files['camp_arquivo']['name'];
                $sFilename = md5(uniqid(date('dmyHis'))).'.'.$this->UploadComponent->ext($sFilename);

                $bUpload = $this->UploadComponent->upload($this->UploadComponent->files["camp_arquivo"], null, $sFilename);

                if($bUpload)
                {
                    $this->data['camp_arquivo'] = $sFilename;
                }
            }

            $this->Campanha->save($this->data);

            $this->CampanhaCampo->salvarCampos($this->Campanha->id, $this->data['cmps_id']);

            $this->redirect('/campanha/code/'.$this->Campanha->id);
        }

        $this->set('arrCampo', $this->Campo->listarTodosCampos( $_SESSION['cliente_id'] ));
       // $this->set('arrTipos', $this->CampoTipo->listarTipos());
    }

    /**
     * Action editar
     * @access public
     * @param integer $piCampId Número do ID da campanha para edição
     */
    public function editar($piCampId = null)
    {
        $this->layout = "default.novo";
        $this->bCampoBusca = false;

        if($piCampId == null) $this->redirect('/campanha');

        $arrCampanhaCampo = $this->CampanhaCampo->listarCampos($piCampId);

        if(!empty($this->data))
        {
            $this->CampanhaCampo->limparCampos($piCampId);

            $this->Campanha->id = $piCampId;

            $objCamp = (object) $this->Campanha->first(array(
						'conditions' => array('camp_id' => $piCampId)
            ));

            $this->data['camp_arquivo'] = $objCamp->camp_arquivo;

            if(!empty($_FILES))
            {
                $this->UploadComponent->path = '/uploads';

                $this->UploadComponent->allowedTypes = array('pdf', 'PDF', 'ppt', 'PPT');
                $this->UploadComponent->maxSize = 3;

                $sFilename = $this->UploadComponent->files['camp_arquivo']['name'];
                $sFilename = md5(uniqid(date('dmyHis'))).'.'.$this->UploadComponent->ext($sFilename);

                $bUpload = $this->UploadComponent->upload($this->UploadComponent->files["camp_arquivo"], null, $sFilename);

                if($bUpload)
                {
                    $this->data['camp_arquivo'] = $sFilename;
                }
            }

            $this->Campanha->id = $piCampId;
            $this->Campanha->save($this->data);

            $this->CampanhaCampo->salvarCampos($this->Campanha->id, $this->data['cmps_id']);

            $this->redirect('/campanha');
        }

        $this->set('objCampanha', (object) $this->Campanha->first(array(
                "conditions" => array("camp_id" => $piCampId)
        )));

        $arrCampCmps = array();

        foreach($arrCampanhaCampo as $obj)
        {
            $obj = (object) $obj;

            $arrCampCmps[] = $obj->cmps_id;
        }

        $this->set('arrCampanhaCampo', $arrCampCmps);
        $this->set('arrCampo', $this->Campo->listarTodosCampos( $_SESSION['cliente_id'] ));
       // $this->set('arrTipos', $this->CampoTipo->listarTipos());
    }

    /**
     * Action code
     * @access public
     * @param integer $piCampId Número do ID da campanha para exibição do código
     */
    public function code($piCampId = null)
    {
        $this->layout = "default.novo";
        $this->bCampoBusca = false;

        if($piCampId == null) $this->redirect('/campanha');

        $this->set('iCampId', $piCampId);
    }

    /**
     * Action excluir
     * @access public
     * @param integer $piCampId Número do ID da campanha para exclusão
     */
    public function excluir($piCampId = null)
    {
        $this->autoRender = false;
        if($piCampId == null) $this->redirect('/campanha');
         //se não for admin não pode deletar
        if( $this->Usuario->ehAdmin() )
        {
            // desativar ao inves de excluir
            // procurar leads associados
            $aLead = $this->Lead->all(array(
				'conditions' => array('camp_id' => $piCampId)
            ));
            // se existir leads associados, desativar a campanha
            // os leads passam ?
            if(sizeof($aLead)>0)
            {
                /*
                foreach ($aLead as $objLead) 
                {
                    //$objLead['camp_id'] = ?;
                    //$objLead['lead_ativo'] = 0;
                    $this->Lead->id = $objLead['lead_id'];
                    $this->Lead->save( $objLead );
                }
                */
                $this->data = array();
                $this->data['camp_ativo'] = 0;
                $this->Campanha->id = $piCampId;
                $this->Campanha->save( $this->data );
                $this->redirect('/campanha'); 
            }
            //se não existir, a campanha será deletada e seus campos também.
            else
            {
                $this->CampanhaCampo->limparCampos($piCampId);
                $this->Campanha->delete($piCampId);
                $this->redirect('/campanha');
            }
        }
        else
        {
            $this->redirect('/lead');
        }
        
    }

    /**
     * Montar critérios de listagem específico para Campanhas
     * @access private
     * @return string Critérios para serem usados na consulta
     */
    private function montarCriterio()
    {
        $sCriterio = 'camp_ativo = 1 AND ';
/*
        if((trim($this->param('data1'))!='')&&(trim($this->param('data2'))!=''))
        {
            $sData1 = str_replace('-','/',$this->param('data1'));
            $sData2 = str_replace('-','/',$this->param('data2'));

            $sCriterio .= "(camp_dt_criacao >= '".$this->inverterData($sData1,'-')."' AND camp_dt_criacao <= '".$this->inverterData($sData2,'-')."') AND ";
        }
        else if((trim($_SESSION['data1'])!='')&&(trim($_SESSION['data2'])!=''))
        {
            $sData1 = str_replace('-','/',$_SESSION['data1']);
            $sData2 = str_replace('-','/',$_SESSION['data2']);

            $sCriterio .= "(camp_dt_criacao >= '".$this->inverterData($sData1,'-')."' AND camp_dt_criacao <= '".$this->inverterData($sData2,'-')."') AND ";
        }

        // Filtro por campanha
        if(trim($this->param('campanha')!=''))
        {
            if( $this->param('campanha') != 0 )
            {
                $sCriterio .= "(camp_id = '".$this->param('campanha')."') AND ";

                $_SESSION['filtro_campanha'] = $this->param('campanha');
            }
            else
            {
                $_SESSION['filtro_campanha'] = '';
            }
        }
        else if(isset($_SESSION['filtro_campanha']) and (trim($_SESSION['filtro_campanha']!='')))
        {
            $sCriterio .= "(camp_id = '".$_SESSION['filtro_campanha']."') AND ";
        }
*/
        // Filtro por busca
        if( trim( $this->param('search') ) != '' )
        {
            $sCriterio .= "(camp_nome LIKE '%".$this->param('search')."%') AND ";
        }
        return substr($sCriterio,0,-5);
    }

}

?>